<?php

/**
 * actividades actions.
 *
 * @package    SistemaWebUnlSenescyt
 * @subpackage actividades
 * @author     JFernando
 * @version    SVN: $Id: actions.class.php 23810 2009-11-12 11:07:44Z Kris.Wallsmith $
 */
class actividadesActions extends sfActions {

    public function executeGraba(sfWebRequest $request) {

        if (isset($_POST['id']) && isset($_POST['firstname'])) {
            $id = mysql_escape_String($_POST['id']);
            $firstname = mysql_escape_String($_POST['firstname']);
            $q = Doctrine_Query::create()
                    ->from('actividad a')
                    ->where('a.id_ac = ?', $id);
            $ac = $q->fetchOne();
            $ac->setNombre($firstname);
            $ac->save();
        }
    }

    public function executeIndex(sfWebRequest $request) {
        $idob = $request->getParameter('id_ob');
        $this->getUser()->setAttribute('id_ob', $idob);

        $this->actividads = Doctrine::getTable('actividad')->createQuery('a')
                ->where('a.id_ob = ?', $idob)
                ->execute();
        $q = Doctrine_Query::create()
                ->from('objetivo o')
                ->where('o.id_ob=?', $idob);
        $this->objetivo = $q->fetchOne();

        $q1 = Doctrine_Query::create()
                ->from('proyecto p')
                ->where('p.id_pro=?', $this->objetivo->getIdPro());
        $this->pro = $q1->fetchOne();
    }

    public function executeShow(sfWebRequest $request) {
        $this->actividad = Doctrine_Core::getTable('actividad')->find(array($request->getParameter('id_ac')));
        $this->forward404Unless($this->actividad);
        $this->getUser()->setFlash('notice', 'Actividad Actualizada Correctamente!');
    }

    public function executeNew(sfWebRequest $request) {
        $this->form = new actividadForm();
    }

    public function executeCreate(sfWebRequest $request) {
        $this->forward404Unless($request->isMethod(sfRequest::POST));

        $this->form = new actividadForm();

        $this->processForm($request, $this->form);

        $this->setTemplate('new');
    }

    public function executeEdit(sfWebRequest $request) {
        $this->forward404Unless($actividad = Doctrine_Core::getTable('actividad')->find(array($request->getParameter('id_ac'))), sprintf('Object actividad does not exist (%s).', $request->getParameter('id_ac')));
        $this->form = new actividadForm($actividad);
    }

    public function executeUpdate(sfWebRequest $request) {
        $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
        $this->forward404Unless($actividad = Doctrine_Core::getTable('actividad')->find(array($request->getParameter('id_ac'))), sprintf('Object actividad does not exist (%s).', $request->getParameter('id_ac')));
        $this->form = new actividadForm($actividad);

        $this->processForm($request, $this->form);
    }

    public function executeDelete(sfWebRequest $request) {
        $request->checkCSRFProtection();

        $this->forward404Unless($actividad = Doctrine_Core::getTable('actividad')->find(array($request->getParameter('id_ac'))), sprintf('Object actividad does not exist (%s).', $request->getParameter('id_ac')));
        $aux = $actividad->getIdAc();
        $ido = $actividad->getIdOb();
        $actividad->delete();
        $vau = Doctrine::getTable('valor')->createQuery('v')
                ->where('v.id_ac=?', $aux)
                ->execute();
        foreach ($vau as $vu) :
            $vu->delete();
        endforeach;

        $this->getUser()->setFlash('notice', 'Actividad Borrada Correctamente!');
        $this->redirect('actividades/index?id_ob=' . $ido);
    }

    protected function processForm(sfWebRequest $request, sfForm $form) {
        $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
        if ($form->isValid()) {

            $this->ido = $this->getUser()->getAttribute('id_ob');
            $this->forward404Unless($objetivo = Doctrine_Core::getTable('objetivo')->find(array($this->ido)), sprintf('Object does not exist (%s).', $this->ido));


            $form->getObject()->setIdOb($this->ido);
            $form->getObject()->setObjetivos($objetivo);
            $actividad = $form->save();

            $q = Doctrine_Query::create()
                    ->from('objetivo o')
                    ->where('o.id_ob=?', $this->ido);
            $ob = $q->fetchOne();


            $descripciones = Doctrine::getTable('descripciongeneral')->createQuery('d')
                    ->where('d.id_pro=?', $ob->getIdPro())
                    ->execute();

            if (count($descripciones) >= 0) {
                $fondospro = Doctrine::getTable('fondo')->createQuery('f')
                        ->where('f.id_pro=?', $objetivo->getIdPro())
                        ->execute();
                if (count($fondospro) == 1) {
                    $q2 = Doctrine_Query::create()
                            ->from('fondo f')
                            ->where('f.id_pro=?', $ob->getIdPro())
                            ->andWhere('f.defecto = 1');
                    $fd = $q2->fetchOne();
                    $idfd = $fd->getIdFo();
                    foreach ($descripciones as $descripciongeneral) :
                        $fi = explode("-", $ob->getPeriodos()->getFechai());
                        $ff = explode("-", $ob->getPeriodos()->getFechaf());
                        $ai = $fi[0];
                        $mi = $fi[1];
                        $af = $ff[0];
                        $mf = $ff[1];


                        if ($ai == $af) {
                            while ($mi <= $mf) {
                                $valorfd = new Valor();
                                $valorfd->setIdDg($descripciongeneral->getIdDg());
                                $valorfd->setIdAc($actividad->getIdAc());
                                $valorfd->setMes($mi);
                                $valorfd->setAnio($ai);
                                $valorfd->setVal(0.00);
                                $valorfd->setIdFo($idfd);
                                $valorfd->save();


                                $mi = $mi + 1;
                            }
                        } else {
                            //caso 2
                            //cuando el periodo es superior a 2 anios 
                            $totalanios = $af - $ai;
                            if ($totalanios == 1) {

                                while ($mi <= 12) {
                                    $valorfd = new Valor();
                                    $valorfd->setIdDg($descripciongeneral->getIdDg());
                                    $valorfd->setIdAc($actividad->getIdAc());
                                    $valorfd->setIdFo($idfd);
                                    $valorfd->setMes($mi);
                                    $valorfd->setAnio($ai);
                                    $valorfd->setVal(0.00);
                                    $valorfd->save();


                                    $valorfc->save();


                                    $mi = $mi + 1;
                                }
                                $aux = 1;
                                while ($aux <= $mf) {

                                    $valorfd = new Valor();
                                    $valorfd->setIdDg($descripciongeneral->getIdDg());
                                    $valorfd->setIdAc($actividad->getIdAc());
                                    $valorfd->setIdFo($idfd);
                                    $valorfd->setMes($aux);
                                    $valorfd->setAnio($af);
                                    $valorfd->setVal(0.00);
                                    $valorfd->save();




                                    $aux++;
                                }
                            } else {
                                //caso 3
                                //cuando el periodo es superior a 3 anios 

                                if ($totalanios > 1) {

                                    while ($mi <= 12) {
                                        $valorfd = new Valor();
                                        $valorfd->setIdDg($descripciongeneral->getIdDg());
                                        $valorfd->setIdAc($actividad->getIdAc());
                                        $valorfd->setIdFo($idfd);
                                        $valorfd->setMes($mi);
                                        $valorfd->setAnio($ai);
                                        $valorfd->setVal(0.00);
                                        $valorfd->save();


                                        $mi = $mi + 1;
                                    }

                                    $auxai = $ai + 1;
                                    $auxaf = $af - 1;
                                    while ($auxai <= $auxaf) {
                                        for ($i = 1; $i <= 12; $i++) {
                                            $valorfd = new Valor();
                                            $valorfd->setIdDg($descripciongeneral->getIdDg());
                                            $valorfd->setIdAc($actividad->getIdAc());
                                            $valorfd->setIdFo($idfd);
                                            $valorfd->setMes($i);
                                            $valorfd->setAnio($auxai);
                                            $valorfd->setVal(0.00);
                                            $valorfd->save();
                                        }
                                        $auxai = $auxai + 1;
                                    }
                                    $aux = 1;
                                    while ($aux <= $mf) {
                                        $valorfd = new Valor();
                                        $valorfd->setIdDg($descripciongeneral->getIdDg());
                                        $valorfd->setIdAc($actividad->getIdAc());
                                        $valorfd->setIdFo($idfd);
                                        $valorfd->setMes($aux);
                                        $valorfd->setAnio($af);
                                        $valorfd->setVal(0.00);
                                        $valorfd->save();



                                        $aux++;
                                    }
                                }
                            }
                        }
                    endforeach;
                } else {
                    $q1 = Doctrine_Query::create()
                            ->from('fondo f')
                            ->where('f.id_pro=?', $ob->getIdPro())
                            ->andWhere('f.defecto = 0');
                    $fc = $q1->fetchOne();
                    $idfc = $fc->getIdFo();
                    $q2 = Doctrine_Query::create()
                            ->from('fondo f')
                            ->where('f.id_pro=?', $ob->getIdPro())
                            ->andWhere('f.defecto = 1');
                    $fd = $q2->fetchOne();
                    $idfd = $fd->getIdFo();
                    foreach ($descripciones as $descripciongeneral) :
                        $fi = explode("-", $ob->getPeriodos()->getFechai());
                        $ff = explode("-", $ob->getPeriodos()->getFechaf());
                        $ai = $fi[0];
                        $mi = $fi[1];
                        $af = $ff[0];
                        $mf = $ff[1];


                        if ($ai == $af) {
                            while ($mi <= $mf) {
                                $valorfd = new Valor();
                                $valorfd->setIdDg($descripciongeneral->getIdDg());
                                $valorfd->setIdAc($actividad->getIdAc());
                                $valorfd->setMes($mi);
                                $valorfd->setAnio($ai);
                                $valorfd->setVal(0.00);
                                $valorfd->setIdFo($idfd);
                                $valorfd->save();

                                $valorfc = new Valor();
                                $valorfc->setIdDg($descripciongeneral->getIdDg());
                                $valorfc->setIdAc($actividad->getIdAc());
                                $valorfc->setMes($mi);
                                $valorfc->setAnio($ai);
                                $valorfc->setVal(0.00);
                                $valorfc->setIdFo($idfc);
                                $valorfc->save();
                                $mi = $mi + 1;
                            }
                        } else {
                            //caso 2
                            //cuando el periodo es superior a 2 anios 
                            $totalanios = $af - $ai;
                            if ($totalanios == 1) {

                                while ($mi <= 12) {
                                    $valorfd = new Valor();
                                    $valorfd->setIdDg($descripciongeneral->getIdDg());
                                    $valorfd->setIdAc($actividad->getIdAc());
                                    $valorfd->setIdFo($idfd);
                                    $valorfd->setMes($mi);
                                    $valorfd->setAnio($ai);
                                    $valorfd->setVal(0.00);
                                    $valorfd->save();

                                    $valorfc = new Valor();
                                    $valorfc->setIdDg($descripciongeneral->getIdDg());
                                    $valorfc->setIdAc($actividad->getIdAc());
                                    $valorfc->setIdFo($idfc);
                                    $valorfc->setMes($mi);
                                    $valorfc->setAnio($ai);
                                    $valorfc->setVal(0.00);
                                    $valorfc->save();


                                    $mi = $mi + 1;
                                }
                                $aux = 1;
                                while ($aux <= $mf) {

                                    $valorfd = new Valor();
                                    $valorfd->setIdDg($descripciongeneral->getIdDg());
                                    $valorfd->setIdAc($actividad->getIdAc());
                                    $valorfd->setIdFo($idfd);
                                    $valorfd->setMes($aux);
                                    $valorfd->setAnio($af);
                                    $valorfd->setVal(0.00);
                                    $valorfd->save();

                                    $valorfc = new Valor();
                                    $valorfc->setIdDg($descripciongeneral->getIdDg());
                                    $valorfc->setIdAc($actividad->getIdAc());
                                    $valorfc->setIdFo($idfc);
                                    $valorfc->setMes($aux);
                                    $valorfc->setAnio($af);
                                    $valorfc->setVal(0.00);
                                    $valorfc->save();


                                    $aux++;
                                }
                            } else {
                                //caso 3
                                //cuando el periodo es superior a 3 anios 

                                if ($totalanios > 1) {

                                    while ($mi <= 12) {
                                        $valorfd = new Valor();
                                        $valorfd->setIdDg($descripciongeneral->getIdDg());
                                        $valorfd->setIdAc($actividad->getIdAc());
                                        $valorfd->setIdFo($idfd);
                                        $valorfd->setMes($mi);
                                        $valorfd->setAnio($ai);
                                        $valorfd->setVal(0.00);
                                        $valorfd->save();

                                        $valorfc = new Valor();
                                        $valorfc->setIdDg($descripciongeneral->getIdDg());
                                        $valorfc->setIdAc($actividad->getIdAc());
                                        $valorfc->setIdFo($idfc);
                                        $valorfc->setMes($mi);
                                        $valorfc->setAnio($ai);
                                        $valorfc->setVal(0.00);
                                        $valorfc->save();

                                        $mi = $mi + 1;
                                    }

                                    $auxai = $ai + 1;
                                    $auxaf = $af - 1;
                                    while ($auxai <= $auxaf) {
                                        for ($i = 1; $i <= 12; $i++) {
                                            $valorfd = new Valor();
                                            $valorfd->setIdDg($descripciongeneral->getIdDg());
                                            $valorfd->setIdAc($actividad->getIdAc());
                                            $valorfd->setIdFo($idfd);
                                            $valorfd->setMes($i);
                                            $valorfd->setAnio($auxai);
                                            $valorfd->setVal(0.00);
                                            $valorfd->save();

                                            $valorfc = new Valor();
                                            $valorfc->setIdDg($descripciongeneral->getIdDg());
                                            $valorfc->setIdAc($actividad->getIdAc());
                                            $valorfc->setIdFo($idfc);
                                            $valorfc->setMes($i);
                                            $valorfc->setAnio($auxai);
                                            $valorfc->setVal(0.00);
                                            $valorfc->save();
                                        }
                                        $auxai = $auxai + 1;
                                    }
                                    $aux = 1;
                                    while ($aux <= $mf) {
                                        $valorfd = new Valor();
                                        $valorfd->setIdDg($descripciongeneral->getIdDg());
                                        $valorfd->setIdAc($actividad->getIdAc());
                                        $valorfd->setIdFo($idfd);
                                        $valorfd->setMes($aux);
                                        $valorfd->setAnio($af);
                                        $valorfd->setVal(0.00);
                                        $valorfd->save();

                                        $valorfc = new Valor();
                                        $valorfc->setIdDg($descripciongeneral->getIdDg());
                                        $valorfc->setIdAc($actividad->getIdAc());
                                        $valorfc->setIdFo($idfc);
                                        $valorfc->setMes($aux);
                                        $valorfc->setAnio($af);
                                        $valorfc->setVal(0.00);
                                        $valorfc->save();

                                        $aux++;
                                    }
                                }
                            }
                        }
                    endforeach;
                }
            }



            $this->getUser()->setFlash('notice', 'Actividad Guardada Correctamente!');
            $this->redirect('actividades/index?id_ob=' . $this->getUser()->getAttribute('id_ob'));
        }
    }

}
